﻿using System.Collections.Generic;
using System.Xml.Serialization;
using OWLServerQL.dominio;

namespace OWLServerQL.xml
{
    /// <summary>
    /// Representa el resultado de la consulta OWLServerQL en el XML del resultado de la consulta
    /// </summary>
    [XmlRootAttribute("resultadoConsultaQWLServerQL", Namespace = "", IsNullable = false)]
    public class ResultadoConsultaQWLServerQL
    {
        [XmlElement]
        public string consulta;
        [XmlElement]
        public int encontrados;
        [XmlArrayItem("individuo", typeof(Individuo)), XmlArray("resultado")]
        public List<Individuo> resultado;
        [XmlArrayItem("errorSemantico", typeof(string)), XmlArray("erroresSemanticos")]
        public List<string> erroresSemanticos;
        [XmlArrayItem("errorLexico", typeof(string)), XmlArray("erroresLexicos")]
        public List<string> erroresLexicos;
        [XmlArrayItem("error", typeof(string)), XmlArray("errores")]
        public List<string> errores;

        public ResultadoConsultaQWLServerQL() {
        }

        /// <summary>
        /// Añade errores semanticos
        /// </summary>
        /// <param name="errores"></param>
        public void addErroresSemanticos (IList<ErrorOwlServerLQ> errores) {
            if (errores != null && errores.Count > 0 && erroresSemanticos == null)
            {
                erroresSemanticos = new List<string>();
            }
            addErrores(errores, erroresSemanticos);
        }

        /// <summary>
        /// Añade errores lexicos
        /// </summary>
        /// <param name="errores"></param>
        public void addErroresLexiscos(IList<ErrorOwlServerLQ> errores)
        {
            if (errores != null && errores.Count > 0 && erroresLexicos == null)
            {
                erroresLexicos = new List<string>();
            }
            addErrores(errores, erroresLexicos);
        }

        /// <summary>
        /// Añade errores
        /// </summary>
        /// <param name="errores"></param>
        public void addErrores(IList<ErrorOwlServerLQ> errores)
        {
            if (errores != null && errores.Count > 0 && this.errores == null)
            {
                this.errores = new List<string>();
            }
            addErrores(errores, this.errores);
        }

        /// <summary>
        /// Añade errores a la lista
        /// </summary>
        /// <param name="errores"></param>
        /// <param name="stringErrores"></param>
        private void addErrores(IList<ErrorOwlServerLQ> errores, List<string> stringErrores)
        {
            if (errores != null)
            {
                foreach (ErrorOwlServerLQ er in errores)
                {
                    stringErrores.Add(er.ToString());
                }
            }
        }
    }
}
